package bz.ziro.kanbe.dao;

import java.util.List;

import org.slim3.datastore.Datastore;

import com.google.appengine.api.datastore.Key;

import bz.ziro.kanbe.bean.Pager;
import bz.ziro.kanbe.meta.CommentConfigMeta;
import bz.ziro.kanbe.meta.CommentMeta;
import bz.ziro.kanbe.model.Comment;
import bz.ziro.kanbe.model.CommentConfig;
import bz.ziro.kanbe.util.KeyFactory;

/**
 * Dao
 * @author Administrator
 */
public class CommentDao extends BaseDao<Comment> {

	/**
	 * メタデータ
	 */
    private static final CommentMeta commentMeta = new CommentMeta();

    /**
     * 
     */
    private static final CommentConfigMeta configMeta = new CommentConfigMeta();
    /**
     * ログ検索
     * @param aKey
     * @return
     */
    public static Comment find(Long aKey) {
        Key key = KeyFactory.createCommentKey(aKey);
        return Datastore.query(commentMeta)
        		.filter(
        				commentMeta.key.equal(key)
        		).asSingle();
    }

    /**
     * 削除
     * @param aKey
     */
    public static void delete(Long aKey) {
        Key key = KeyFactory.createLogKey(aKey);
        Datastore.delete(key);
    }

    /**
     * ページャー検索
     * @param aSiteKey
     * @param offset
     * @param limit
     * @return
     */
    public static List<Comment> findPageList(Key aPageKey,Pager pager) {
        //ページのデータを取得
        return  Datastore.query(commentMeta)
        			.filter(
        					commentMeta.ownerPageKey.equal(aPageKey)
        			).offset(pager.getOffset()).limit(pager.getLimit())
        			.sort(commentMeta.createDate.desc).asList();
    }

    /**
     * 公開リストの件数検索
     * @param aSiteKey
     * @param offset
     * @param limit
     * @return
     */
    public static List<Comment> findList(Key aPageKey,int num) {
        //ページのデータを取得
        return  Datastore.query(commentMeta)
        			.filter(
        					commentMeta.ownerPageKey.equal(aPageKey),
        					commentMeta.flag.equal(true)
        			).offset(0).limit(num)
        			.sort(commentMeta.createDate.desc).asList();
    }
    /**
     * カウント
     * @return
     */
    public static int count(Key pageKey) {
        return Datastore.query(commentMeta)
        		.filter(
        			commentMeta.ownerPageKey.equal(pageKey)
        		).count();
    }

    /**
     * 設定の取得
     * @param valueOf
     * @return
     */
	public static CommentConfig findConfig(Key aTemplateKey) {
        return Datastore.query(configMeta)
		.filter(
				configMeta.ownerTemplateKey.equal(aTemplateKey)
		).asSingle();
	}

}
